package view.ventanas_principales.panels;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import model.Alumno;
import model.Cursada;
import model.Curso;
import model.PersonalAdministrativo;
import model.comunication.ICursada;
import model.utils.CalendarTable;
import view.cursada.ConsultarCursada;

public class CursadaPanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private PersonalAdministrativo personalAdministrativo;
	private ICursada comunicationCursada;
	private Map<Integer, Cursada> cursadaSelection;
	private JTable tableCursada;
	private DefaultTableModel modeloCursadas;
	private List<Cursada> cursadas;

	public CursadaPanel(PersonalAdministrativo personalAdministrativo) {
		this.personalAdministrativo = personalAdministrativo;
		this.comunicationCursada = ICursada.getInstance();
		constructor();
		inicialize();
	}

	private void inicialize() {
		setLayout(new BorderLayout(0, 0));
		// -------------------------------------------------------------------------------------------------------------------------------------------
		// private Integer id;
		// private Calendar fechaFinCursada;///// calcula solo
		// private Empresa empresa;
		// private List<Alumno> alumnos; abre inscripcion...
		// private List<Evaluacion> evaluaciones; cursada
		// private List<Clase> clases; llenan calculando.
		// -------------------------------------------------------------------------------------------------------------------------------------------
		// private Calendar fechaInicioCursada;//// crear cursada
		// private Calendar fechaInicioInscripcion; crear cursada
		// private Calendar fechaFinInscripcion; crear cursada
		// private Integer cantidadClases y horasSemanales.... crear cursada
		// private Curso curso;/// crear cursada
		// -------------------------------------------------------------------------------------------------------------------------------------------

		tableCursada = new JTable();
		tableCursada.setModel(new DefaultTableModel(new Object[][] { { "5", "5", "Operador de PC B\u00E1sico", "24-10-2014 15:00", "19-11-2014 17:00", "45", "0", null, "creado" }, }, new String[] { "id", "Cursada", "Curso", "Inicio", "Fin", "Capacidad", "Inscriptos", "Instructor", "Estado" }));
		tableCursada.getColumnModel().getColumn(0).setPreferredWidth(0);
		tableCursada.getColumnModel().getColumn(0).setMinWidth(0);
		tableCursada.getColumnModel().getColumn(0).setMaxWidth(0);
		tableCursada.getColumnModel().getColumn(1).setPreferredWidth(45);
		tableCursada.getColumnModel().getColumn(2).setPreferredWidth(136);
		tableCursada.getColumnModel().getColumn(3).setPreferredWidth(85);
		tableCursada.getColumnModel().getColumn(4).setPreferredWidth(85);
		tableCursada.getColumnModel().getColumn(5).setPreferredWidth(61);
		tableCursada.getColumnModel().getColumn(6).setPreferredWidth(55);
		tableCursada.getColumnModel().getColumn(7).setPreferredWidth(80);
		tableCursada.getColumnModel().getColumn(8).setPreferredWidth(40);
		setLayout(new BorderLayout(0, 0));
		tableCursada.getTableHeader().setReorderingAllowed(false);
		JScrollPane scrollEvento = new JScrollPane(tableCursada);
		scrollEvento.setViewportView(tableCursada);
		this.add(scrollEvento);

		modeloCursadas = (DefaultTableModel) tableCursada.getModel();
		TableRowSorter<TableModel> rowSorter = new TableRowSorter<TableModel>(modeloCursadas);
		tableCursada.setRowSorter(rowSorter);

		JPanel TopPanel = new JPanel();
		add(TopPanel, BorderLayout.SOUTH);

		JButton buttonConsultar = new JButton("Consultar Cursada");
		buttonConsultar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int fila = tableCursada.getSelectedRow();
				if (fila >= 0) {
					Integer dato = (Integer) modeloCursadas.getValueAt(fila, 0);

					Cursada cursada = comunicationCursada.getCursada(dato);
					ConsultarCursada consultarCursada = new ConsultarCursada(cursada);
					consultarCursada.setVisible(true);
				}

			}
		});
		TopPanel.add(buttonConsultar);
		buttonConsultar.setIcon(new ImageIcon(CursadaPanel.class.getResource("/Icon_/search_16.png")));
		buttonConsultar.setFont(new Font("Tahoma", Font.BOLD, 11));
		cursadas = comunicationCursada.getAllCursadas();
		loadTable();
	}

	private void constructor() {

		this.cursadaSelection = new HashMap<Integer, Cursada>();
	}

	private void loadTable() {

		for (Cursada cursada : cursadas) {
			// TODO AGREGAR IDENTIFICADOR CURSADA

			Curso curso = cursada.getCurso();
			CalendarTable fechaInicio = new CalendarTable();
			fechaInicio.setTimeInMillis(cursada.getFechaInicioCursada().getTimeInMillis());

			CalendarTable fechaFin = new CalendarTable();
			if (cursada.getFechaFinCursada() != null) {
				fechaFin.setTimeInMillis(cursada.getFechaFinCursada().getTimeInMillis());

			} else {
				fechaFin = null;
			}
			List<Alumno> alumnos = cursada.getAlumnos();
			Object[] arreglo = { cursada.getId(), cursada.getId(), curso != null ? curso.getNombre() : "", fechaInicio, fechaFin, cursada.getVacantes(), alumnos != null ? alumnos.size() : 0, cursada.getInstructor(), cursada.getEstado() };
			modeloCursadas.addRow(arreglo);

		}
	}
}
